The present invention relates generally to conversion from a binary number to a binary coded decimal (BCD) number.
Present-day processors provide hardware support for binary floating-point computation. While this format is suitable for general-purpose applications, it is typically not well suited for financial, commercial applications because the decimal data cannot be exactly represented with binary floating-point values. That is, binary floating-point numbers can only approximate many decimal numbers. For example, the value (0.1) would need an infinitely recurring binary fraction. In contrast, a decimal number system can represent 0.1 exactly, as one tenth (i.e., 10−1). Consequently, binary floating-point, in many cases, cannot be used for financial calculations or for any calculations where the results achieved are required to match those which might be calculated by hand. This problem is avoided by using base ten (decimal) exponents and preserving those exponents where possible.
Unfortunately, many existing BCD techniques are inefficient to implement. For example, computation of the digits, dn, dn−1, dn−2 . . . d1, d0 is generally done by division of the number by 10, 102, 103, 104 . . . etc., with quotient and remainder computations at each stage. These operations are difficult to implement in hardware due to the need for an explicit integer divider. Accordingly, an improved BCD approach is desired.